import XLSS from 'xlsx-js-style'


export function exportStyleExcel({header, data, filename}) {
	// excel的表数据，根据实际情况生成
	data = [...data]
	data.unshift(header)
	let workbook = XLSS.utils.book_new(); // 工作簿
	let worksheet = XLSS.utils.aoa_to_sheet(data); // 数据表


	/* 设置worksheet每列的最大宽度 */
	const colWidth = data.map(row => row.map(val => {
		/* 先判断是否为null/undefined */
		if (val == null) {
			return { 'wch': 10 }
		} else if (val.toString().charCodeAt(0) > 255) { /* 再判断是否为中文 */
			return {
				'wch': val.toString().length * 2+4
			}
		} else {
			return {
				'wch': val.toString().length+4
			}
		}
	}))
	/* 以第一行为初始值 */
	let result = colWidth[0]
	for (let i = 1; i < colWidth.length; i++) {
		for (let j = 0; j < colWidth[i].length; j++) {
			if (result[j] && result[j]['wch'] < colWidth[i][j]['wch']) {
				result[j]['wch'] = colWidth[i][j]['wch']
			}
		}
	}
	// ws['!cols']设置单元格宽度, [{'wch': 10},{'wch': 10}] ===> 第一列和第二列设置了宽度
	worksheet['!cols'] = result



	//以下是样式设置，样式设置放在组织完数据之后，xlsx-js-style的核心API就是SheetJS的
	Object.keys(worksheet).forEach(key => {
		// 非!开头的属性都是单元格
		if (!key.startsWith("!")) {
			worksheet[key].s = {
				font: {
					sz: "12"
				},
				alignment: {
					horizontal: "left",
					vertical: "center",
					wrapText: true
				},
				border: {
					top: { style: 'thin' },
					right: { style: 'thin' },
					bottom: { style: 'thin' },
					left: { style: 'thin' }
				}
			};
		}
	})
	XLSS.utils.book_append_sheet(workbook, worksheet, "Sheet1");
	XLSS.writeFile(workbook, filename);
}
